// app.js
import { PerformanceOptimizer } from './utils/performanceOptimizer.js'
import { ErrorHandler } from './utils/errorHandler.js'

App({
  onLaunch() {
    console.log('🚀 TodoList小程序启动')
    
    try {
      // 初始化性能优化器
      PerformanceOptimizer.init()
      
      // 检查本地存储
      this.checkStorage()
      
      // 获取系统信息
      this.getSystemInfo()
      
      // 检查更新
      this.checkForUpdates()
      
    } catch (error) {
      console.error('应用启动失败:', error)
      ErrorHandler.handleError(error, 'system', 'fatal', {
        operation: 'app_launch'
      })
    }
  },

  onShow() {
    console.log('TodoList小程序显示')
  },

  onHide() {
    console.log('TodoList小程序隐藏')
  },

  onError(error) {
    console.error('全局错误:', error)
    ErrorHandler.handleError(error, 'system', 'error', {
      operation: 'global_error'
    })
  },

  onUnhandledRejection(res) {
    console.error('未处理的Promise拒绝:', res)
    ErrorHandler.handleError(res.reason, 'system', 'error', {
      operation: 'unhandled_rejection',
      promise: res.promise
    })
  },

  /**
   * 检查小程序更新
   */
  checkForUpdates() {
    if (wx.canIUse('getUpdateManager')) {
      const updateManager = wx.getUpdateManager()
      
      updateManager.onCheckForUpdate((res) => {
        console.log('检查更新结果:', res.hasUpdate)
      })
      
      updateManager.onUpdateReady(() => {
        wx.showModal({
          title: '更新提示',
          content: '新版本已经准备好，是否重启应用？',
          success: (res) => {
            if (res.confirm) {
              updateManager.applyUpdate()
            }
          }
        })
      })
      
      updateManager.onUpdateFailed(() => {
        console.error('新版本下载失败')
        wx.showToast({
          title: '更新失败',
          icon: 'error'
        })
      })
    }
  },

  /**
   * 检查本地存储
   */
  checkStorage() {
    try {
      const tasks = wx.getStorageSync('todolist_tasks')
      if (!tasks) {
        // 初始化任务存储
        wx.setStorageSync('todolist_tasks', [])
        console.log('初始化任务存储')
      }
    } catch (e) {
      console.error('检查本地存储失败:', e)
    }
  },

  /**
   * 获取系统信息
   */
  getSystemInfo() {
    wx.getSystemInfo({
      success: (res) => {
        this.globalData.systemInfo = res
        console.log('系统信息:', res)
      },
      fail: (err) => {
        console.error('获取系统信息失败:', err)
      }
    })
  },

  /**
   * 全局数据
   */
  globalData: {
    systemInfo: null,
    version: '1.0.0'
  }
})
